﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using Metriks.Metrike.MetrikaLOC;
using Metriks.Parsiranje.Klase;
using Metriks.Parsiranje;

namespace Metriks.ParsiranjeTest
{
    [TestFixture]
    class LOCtest
    {
        [Test]
        public void testUkupanBroj()
        {
            List<String> rawProgram = new List<String>() { "function helloWorld() returns void", "while (a<b) do", "int x=0;", "while (a<b) do", "if (a==c) then", "int x=0;", "else", "int a=100;", "endif", "endwhile", "a=b;", "endwhile", "endfunction" };
            List<LOC> parsirano = Parser.parsiraj(rawProgram);
            LOCMetrika l = new LOCMetrika(parsirano);
            Assert.AreEqual(13, l.getUkupanBroj());
        }
        [Test]
        public void testBrojPraznih()
        {
            List<String> rawProgram = new List<String>() { "function helloWorld() returns void","   ", "while (a<b) do", "int x=0;", "while (a<b) do", "if (a==c) then", "int x=0;", "else", "int a=100;", "endif", "endwhile", "a=b;", "endwhile", "endfunction" };
            List<LOC> parsirano = Parser.parsiraj(rawProgram);
            LOCMetrika l = new LOCMetrika(parsirano);
            Assert.AreEqual(1, l.getBrojpraznih());
        }
        [Test]
        public void testBrojKomentara()
        {
            List<String> rawProgram = new List<String>() { "function helloWorld() returns void", "   ", "while (a<b) do", "int x=0;", "while (a<b) do", "if (a==c) then", "int x=0;", "else","// komentar", "int a=100;", "endif", "endwhile", "a=b;", "endwhile", "endfunction" };
            List<LOC> parsirano = Parser.parsiraj(rawProgram);
            LOCMetrika l = new LOCMetrika(parsirano);
            Assert.AreEqual(1, l.getBrojpraznih());
        }
        [Test]
        public void testBrojIskaza()
        {
            List<String> rawProgram = new List<String>() { "function helloWorld() returns void", "   ", "while (a<b) do", "int x=0;", "while (a<b) do", "if (a==c) then", "int x=0;", "else", "// komentar", "int a=100;", "endif", "endwhile", "a=b;", "endwhile", "endfunction" };
            List<LOC> parsirano = Parser.parsiraj(rawProgram);
            LOCMetrika l = new LOCMetrika(parsirano);
            Assert.AreEqual(7, l.getBrojIskaza());
        }
        [Test]
        public void testBrojIzvrsnih()
        {
            List<String> rawProgram = new List<String>() { "function helloWorld() returns void", "   ", "while (a<b) do", "int x=0;", "while (a<b) do", "if (a==c) then", "int x=0;", "else", "// komentar", "int a=100;", "endif", "endwhile", "a=b;", "endwhile", "endfunction" };
            List<LOC> parsirano = Parser.parsiraj(rawProgram);
            LOCMetrika l = new LOCMetrika(parsirano);
            Assert.AreEqual(13, l.getBrojIzvrsnih());
        }
        [Test]
        public void testBrojdeklaracija()
        {
            List<String> rawProgram = new List<String>() { "function helloWorld() returns void", "   ", "while (a<b) do", "int x=0;", "while (a<b) do", "if (a==c) then", "int x=0;", "else", "// komentar", "int a=100;", "endif", "endwhile", "a=b;", "endwhile", "endfunction" };
            List<LOC> parsirano = Parser.parsiraj(rawProgram);
            LOCMetrika l = new LOCMetrika(parsirano);
            Assert.AreEqual(4, l.getBrojDefinicijaPodataka());
        }
    }
}
